package com.sitech.jedis;

import redis.clients.jedis.*;

import java.util.LinkedHashSet;
import java.util.Set;

public final class RedisPool {
    //Redis服务器IP
    private static String ADDR = "47.106.210.140";
    //Redis的端口号
    private static Integer PORT = 7000;
    //访问密码
    private static String AUTH = "Zrs348724481!";

    //可用连接实例的最大数目，默认为8；
    //如果赋值为-1，则表示不限制，如果pool已经分配了maxActive个jedis实例，则此时pool的状态为exhausted(耗尽)
    private static Integer MAX_TOTAL = 1024;
    //控制一个pool最多有多少个状态为idle(空闲)的jedis实例，默认值是8
    private static Integer MAX_IDLE = 200;
    //等待可用连接的最大时间，单位是毫秒，默认值为-1，表示永不超时。
    //如果超过等待时间，则直接抛出JedisConnectionException
    private static Integer MAX_WAIT_MILLIS = 10000;
    private static Integer TIMEOUT = 10000;
    //在borrow(用)一个jedis实例时，是否提前进行validate(验证)操作；
    //如果为true，则得到的jedis实例均是可用的
    private static Boolean TEST_ON_BORROW = true;
    private  static JedisPool jedisPool = null;
    private  static  JedisCluster cluster=null;

    /**
     * 静态块，初始化Redis连接池
     */
    static {
        try {
            JedisPoolConfig config = new JedisPoolConfig();
        /*注意：
            在高版本的jedis jar包，比如本版本2.9.0，JedisPoolConfig没有setMaxActive和setMaxWait属性了
            这是因为高版本中官方废弃了此方法，用以下两个属性替换。
            maxActive  ==>  maxTotal
            maxWait==>  maxWaitMillis
         */
            config.setMaxTotal(MAX_TOTAL);
            config.setMaxIdle(MAX_IDLE);
            config.setMaxWaitMillis(MAX_WAIT_MILLIS);
            config.setTestOnBorrow(TEST_ON_BORROW);

            Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();
//            nodes.add(new HostAndPort("47.106.210.140", 7000));
//            nodes.add(new HostAndPort("47.106.210.140", 7001));
//            nodes.add(new HostAndPort("47.106.210.140", 7002));
//            nodes.add(new HostAndPort("47.106.210.140", 7003));
//            nodes.add(new HostAndPort("47.106.210.140", 7004));
//            nodes.add(new HostAndPort("47.106.210.140", 7005));

//            cluster.host1=172.21.11.199
//            cluster.port1=6001
//            cluster.port2=6002
//            cluster.port3=6003
//            cluster.port4=6004
//            cluster.port5=6005
//            cluster.port6=6006
//
//            cluster.host2=172.21.11.202
            nodes.add(new HostAndPort("172.18.193.43", 32768));
//            nodes.add(new HostAndPort("172.21.11.199", 6001));
//            nodes.add(new HostAndPort("172.21.11.199", 6002));
//            nodes.add(new HostAndPort("172.21.11.202", 6006));
//            nodes.add(new HostAndPort("172.21.11.202", 6004));
//            nodes.add(new HostAndPort("172.21.11.202", 6005));

            cluster = new JedisCluster(nodes,config);

//            cluster = new JedisCluster(nodes,10000,1000,1000,"Zrs348724481!", config);

//            jedisPool = new JedisPool(config,ADDR,PORT,TIMEOUT,AUTH);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 获取Jedis实例
     * @return
     */
    public synchronized static JedisCluster getJedis(){
        return cluster;
    }

    public static void returnResource(final Jedis jedis){
        //方法参数被声明为final，表示它是只读的。
//        if(jedis!=null){
//            jedisPool.returnResource(jedis);
//            //jedis.close()取代jedisPool.returnResource(jedis)方法将3.0版本开始
//            //jedis.close();
//        }
    }
}
